package yl.hs.bmipfull.daos.salemanage;


import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import yl.hs.bmipfull.daos.BaseDao;
import yl.hs.bmipfull.pojo.salemanage.SaleContractEntity;

import java.util.List;
import java.util.Map;

/**
 * ISaleContractDao
 *
 * @author 谢景广
 * @date 2021-05-17
 */
@Repository
public interface ISaleContractDao extends BaseDao<SaleContractEntity> {
    /**
     * 查询销售合同信息信息
     *
     * @param map 查询条件 {@link SaleContractEntity}
     * @return 销售合同信息-List<{@link SaleContractEntity}>
     */
    List<SaleContractEntity> queryList(@Param("map") Map<String, Object> map);

    /**
     * 分页查询销售合同信息信息
     *
     * @param map 查询条件 {@link SaleContractEntity}
     * @return 站内信息-List<{@link SaleContractEntity}>
     */
    List<SaleContractEntity> queryPage(@Param("map") Map<String, Object> map, String[] tagSNArray,@Param("filters") List<Map<String,Object>> filters);

    /**
     * 根据查询条件统计数据数量
     *
     * @param query 查询条件
     * @return 数据数量
     */
    Integer queryCountByCondition(@Param("map") Map<String, Object> query, String[] tagSNArray,@Param("filters") List<Map<String,Object>> filters);

    /**
     * 分页查询销售合同信息信息
     *
     * @param map 查询条件 {@link SaleContractEntity}
     * @return 站内信息-List<{@link SaleContractEntity}>
     */
    List<SaleContractEntity> queryPage(@Param("map") Map<String, Object> map, @Param("filters") List<Map<String,Object>> filters);

    /**
     * 根据查询条件统计数据数量
     *
     * @param query 查询条件
     * @return 数据数量
     */
    Integer queryCountByCondition(@Param("map") Map<String, Object> query, @Param("filters") List<Map<String,Object>> filters);

    /**
     * 根据合同编号查询合同名称
     *
     * @param contractSn 合同编号
     * @return 合同名称
     */
    String findContractNameBySn(String contractSn);
    /**
     * 根据合同编号集合查询合同信息
     * @param sn 编号集合
     * @return 合同编号集合
     */
    List<SaleContractEntity> queryBylistSn(@Param("sn") List<String> sn);

    /**
     * 根据合同编号集合修改状态
     * @param snArray 合同编号集合
     * @param state 合同状态
     * @return 受影响行数
     */
    Integer changeBySn(String[] snArray,short state);


    /**
     * 根据产品类型sn，分页查询合同信息
     * @param map 查询条件
     * @param filters 筛选条件
     * @return 执行结果
     */
    List<SaleContractEntity> queryPageByProductCateSn(@Param("map") Map<String, Object> map,
                                                      @Param("filters") List<Map<String,Object>> filters
                                                      );
    /**
     * 根据产品类型sn，分页查询合同信息
     * @param map 查询条件
     * @param filters 筛选条件
     * @param productCateSn 产品类型sn
     * @return 执行结果
     */
    List<SaleContractEntity> queryPageConstruction(@Param("map") Map<String, Object> map,
                                                      @Param("filters") List<Map<String,Object>> filters,
                                                      String productCateSn,@Param("snList")List<String> snList);

    /**
     * 根据产品类型sn，分页查询合同信息
     * @param map 查询条件
     * @param filters 筛选条件
     * @return 执行结果
     */
    int queryPageSizeByProductCateSn(@Param("map") Map<String, Object> map,
                                                      @Param("filters") List<Map<String,Object>> filters);

    /**
     * 根据产品类型sn，分页查询合同信息
     * @param map 查询条件
     * @param filters 筛选条件
     * @param productCateSn 产品类型sn
     * @return 执行结果
     */
    int queryPageSizeConstruction(@Param("map") Map<String, Object> map,
                                     @Param("filters") List<Map<String,Object>> filters,
                                     String productCateSn,@Param("snList")List<String> snList);

    /**
     * 根据标签编号获取执行中的合同编号集合
     * @param tags 标签编号数组
     * @return 执行中的合同编号集合
     */
    List<String> querySNListByTags(@Param("tagSNArray") String[] tags);

    /**
     * 获取客户执行中的合同
     * @param customerSN 客户编号
     * @return 合同集合
     */
    List<SaleContractEntity> queryByCustomerSN(@Param("customerSN")String customerSN);

    /**
     * 获取客户的销售合同的数量
     * @param query 搜索条件
     * @param customerSN 客户编号
     * @return 合同数量
     */
    Integer queryCountByCustom(@Param("map")Map<String, Object> query,@Param("snList") String customerSN);

    /**
     * 获取客户的销售合同
     * @param query 搜索条件
     * @param customerSN 客户编号
     * @return 合同集合
     */
    List<SaleContractEntity> queryDataByCustom(@Param("map")Map<String, Object> query, @Param("snList")String customerSN);

    /**
     * 获取工地用户关联的销售合同数量
     * @param query 搜索条件
     * @param snList 关联的合同编号
     * @return 合同集合
     */
    Integer queryCountByCustom(@Param("map")Map<String, Object> query,@Param("snList") List<String> snList);

    /**
     * 获取工地用户关联的销售合同
     * @param query 搜索条件
     * @param snList 关联的合同编号
     * @return 合同集合
     */
    List<SaleContractEntity> queryDataByCustom(@Param("map")Map<String, Object> query,@Param("snList")List<String> snList);

    /**
     * 获取工地用户权限范围内的合同编号
     * @param companySN 公司编号
     * @return 合同编号集合
     */
    List<String> querySNListByCustomSN(@Param("companySN")String companySN);


    SaleContractEntity findByCustomerSNAndProjectSN(@Param("customerSN")String customerSN, @Param("projectSN")String projectSN);
    SaleContractEntity findByProjectSN(@Param("projectSN")String projectSN);
    @Select("select count(0) from sale_contract where state =#{state}")
    Integer getCountByState(short state);

    List<SaleContractEntity> getAll();

    SaleContractEntity queryPageSn(@Param("map") Map<String, Object> query, String[] tagSNArray, @Param("filters") List<Map<String, Object>> filters,String productCateSn);
    @Select("update  sale_contract set truckPlate = #{truckplate} where sn=#{sn}")
    Integer updateTruckPlate(String truckplate,String sn);
    @Select("select * from sale_contract where state >=0 and salerSN = #{salerSN}")
    List<SaleContractEntity> queryBySaleSN(String salerSN);
}
